package co.com.bean.sedejornadas;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import co.com.smart.maestro.infraestructure.dto.ResponseJson;
import co.com.smart.maestro.infraestructure.dto.SedeJornadasDTO;
import co.com.smart.mapper.Mapper;
import co.com.smart.persistence.entity.SedeJornadasFacadeLocal;
import co.com.smart.persistence.entity.dto.SmartSedeJornadas;
import co.com.smart.session.DelegateContextEJB;
import co.com.smart.utilidades.Constantes;

/**
 * Session Bean implementation class SedeJornadasBean
 */
@Stateless(mappedName = "ejb/SedeJornadasBean")
public class SedeJornadasBean implements SedeJornadasBeanLocal{
		private SedeJornadasFacadeLocal facade;
		
		@Resource
		private SessionContext session;
		
		public SedeJornadasBean(){
			facade = DelegateContextEJB.getSedeJornadasFacadeLocal();
		}
		
		

		@Override
		public ResponseJson insertarSedeJornadas(SedeJornadasDTO sedeJornadasDTO) {

			ResponseJson response = new ResponseJson(); 
			try {
				//sedeJornadasDTO.setCousuario(session.getCallerPrincipal().getName());				
				sedeJornadasDTO.setFhingreso(new Date());
				System.out.println("dto ->"+sedeJornadasDTO);
				facade.create(Mapper.mapperSmartSedeJornadasToDto(sedeJornadasDTO));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeJornadas almacenado.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeJornadas almacenado.");
			} catch (Throwable e) {
				e.printStackTrace();
				e.getLocalizedMessage();
				System.err.println("Error insertando el SedeJornadas -> " + e.getMessage());
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible almacenar la SedeJornadas.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}

			return response ;
		}
		
		@Override
		public List<SedeJornadasDTO> consultarAllSedeJornadas(){
			List<SedeJornadasDTO> SedeJornadas = new ArrayList<SedeJornadasDTO>();
			for (SmartSedeJornadas entity : facade.findAll()) {
				if(entity.getSmFhretiro() == null){
					SedeJornadas.add(Mapper.mapperDtoToSmartSedeJornadas(entity));
				}
			}

			return SedeJornadas;
		}

		@Override
		public SedeJornadasDTO consultarSedeJornadasId(SedeJornadasDTO sedeJornadasDTO) {
			SedeJornadasDTO SedeJornadas = new SedeJornadasDTO();
			
			SmartSedeJornadas entity  = facade.find(sedeJornadasDTO.getScsedesjornadas());
			if(entity != null && entity.getSmFhretiro() == null){
				SedeJornadas = Mapper.mapperDtoToSmartSedeJornadas(entity);
			}
			return SedeJornadas;
		}

		@Override
		public ResponseJson editSedeJornadas(SedeJornadasDTO sedeJornadas) {
			ResponseJson response = new ResponseJson(); 
			try {
				sedeJornadas.setFhmodificacion(new Date());
				facade.edit(Mapper.mapperSmartSedeJornadasToDto(sedeJornadas));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeJornadas editado.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeJornadas editado.");
			} catch (Throwable e) {
				System.err.println("Error editando el SedeJornadas -> " + e.getMessage());
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible editar la SedeJornadas.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}

			return response ;
		}

		@Override
		public ResponseJson removeSedeJornadas(SedeJornadasDTO sedeJornadas,  boolean logic) {
			ResponseJson response = new ResponseJson(); 
			if(logic){
				try {
					sedeJornadas.setFhretiro(new Date());
					sedeJornadas.setFhmodificacion(new Date());
					facade.edit(Mapper.mapperSmartSedeJornadasToDto(sedeJornadas));
					response.setCodigo(Constantes.StatusResponse.OK.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeJornadas inactivado");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeJornadas inactivado.");
				} catch (Throwable e) {
					System.err.println("Error editando el SedeJornadas -> " + e.getMessage());
					response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible inactivar el SedeJornadas.");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
				}
			}else{
				try {
					facade.remove(Mapper.mapperSmartSedeJornadasToDto(sedeJornadas));
					response.setCodigo(Constantes.StatusResponse.OK.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeJornadas eliminado");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "SedeJornadas eliminado.");
				} catch (Throwable e) {
					System.err.println("Error eliminando el SedeJornadas -> " + e.getMessage());
					response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible eliminar el SedeJornadas.");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
				}
			}
			return response ;
		}
}
